﻿using Alumnos.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Alumnos.Controllers
{
    [Authorize]
    public class AlumnoController : Controller
    {
        private AlumnosContext context = new AlumnosContext();

        public ActionResult Index()
        {
            IEnumerable<Alumno> alumnos = context.Alumnos;
            return View(alumnos);
        }

        [HttpGet]
        public ActionResult Agregar()
        {
            return View(new Alumno());
        }

        [HttpPost]
        public ActionResult Agregar(Alumno alumno)
        {
            if (ModelState.IsValid)
            {
                context.Alumnos.Add(alumno);
                context.SaveChanges();
                return RedirectToAction("Index", "Alumno");
            }

            return View("Agregar", alumno);
        }

        [HttpGet]
        public ActionResult Editar(int id)
        {
            Alumno alumno = context.Alumnos.Find(id);
            return View(alumno);
        }

        [HttpPost]
        public ActionResult Editar(Alumno alumno)
        {
            if (ModelState.IsValid)
            {
                // El alumno que llega por parametro, no fue recuperado dese el Contexto.
                // Por lo tanto EntityFramework no puede gestionarlo.
                //
                // Como nosotros SABEMOS que ese alumno deberia existir, lo agrego al Contexto
                // Pero como todo lo que se agrega al contexto por medio del metodo Entry o Attach
                // se hace en estado Unchanged, fuerzo el cambio de estado a Modified
                //
                // De esta forma cuando se ejecuta SaveChanges EntityFramework generara un update
                // para este elemento.
                context.Entry(alumno).State = System.Data.Entity.EntityState.Modified;
                context.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(model: alumno);
        }

        // Lo correcto es que el borrar, al ser una operacion que afecta la base de datos sea un POST.
        // Pero como eso implicaria o un formulario, o utilizar javascript, permitiremos utilizar GET
        // para llamar a esta operación.
        //
        // Esto lo hacemos asi porque soy perezoso. Pero lo correcto es un POST.
        // Una forma de resolver el problema sin javascript seria ir auna pagina intermedia de confirmacion
        // de borrado, y en esa pagina colocar un formulario que realice la operación utilizando POST
        // [HttpPost]
        public ActionResult Borrar(int id)
        {
            Alumno alumno = context.Alumnos.Find(id);
            context.Alumnos.Remove(alumno);
            context.SaveChanges();

            return RedirectToAction("Index");
        }

    }
}
